<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <title>JS中模拟多态</title>
</head>
<body>
<script>
  /*
  * 所谓的多态就是代码不会写死 在定义的时候无法知道函数最终的调用情况
  * 只有在函数真正调用的时候才知道传来的到底是什么
  *
  * 多态实现的本质就是定义的时候函数是空的，真正实现的时候再传值
  * 在java中多态一般是适用函数参数为父类或者接口类型的数据实现的
  * 也可以基于继承重写方法来实现
  *
  * */


  /*
  * JS中可以使用高阶函数来拟合出多态的效果 比如数组的map方法就是多态
  * */

  /*
  * 还可以像java那样基于继承的方法重写来实现
  * */


  class Poly {
    constructor(num) {
      this.num = num
    }
     handle(){
       let res = this.beforeHandle();
       return res+this.num
     }

     beforeHandle(){

    }
  }

  class MyPoly extends Poly{
     constructor(num,b) {
       super(num);
       this.b = b
     }

     beforeHandle() {
        return this.b
     }
  }

  let myPoly = new MyPoly(100,20);
  console.log(myPoly.handle());


</script>
</body>
</html>